from tortoise import BaseDBAsyncClient


async def upgrade(db: BaseDBAsyncClient) -> str:
    return """
        CREATE TABLE IF NOT EXISTS `aerich` (
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `version` VARCHAR(255) NOT NULL,
    `app` VARCHAR(100) NOT NULL,
    `content` JSON NOT NULL
) CHARACTER SET utf8mb4;
CREATE TABLE IF NOT EXISTS `users` (
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `username` VARCHAR(50) NOT NULL UNIQUE COMMENT '用户名',
    `password` VARCHAR(128) NOT NULL COMMENT '密码',
    `nickname` VARCHAR(50) COMMENT '昵称',
    `avatar` VARCHAR(255) COMMENT '头像',
    `email` VARCHAR(255) COMMENT '邮箱',
    `phone` VARCHAR(20) COMMENT '手机号',
    `role_id` INT NOT NULL COMMENT '角色ID' DEFAULT 0,
    `dept_id` INT NOT NULL COMMENT '部门ID' DEFAULT 0,
    `position` VARCHAR(50) COMMENT '职位',
    `is_active` BOOL NOT NULL COMMENT '是否激活' DEFAULT 1,
    `is_superuser` BOOL NOT NULL COMMENT '是否超级管理员' DEFAULT 0,
    `last_login` DATETIME(6) COMMENT '最后登录时间',
    `last_ip` VARCHAR(50) COMMENT '最后登录IP',
    `remark` LONGTEXT COMMENT '备注',
    `created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
    `updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4 COMMENT='后台管理系统用户表';
CREATE TABLE IF NOT EXISTS `permissions` (
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(100) NOT NULL COMMENT '权限名称',
    `code` VARCHAR(100) NOT NULL UNIQUE COMMENT '权限编码',
    `type` VARCHAR(20) NOT NULL COMMENT '权限类型：menu(菜单), button(按钮), api(接口)' DEFAULT 'menu',
    `parent_id` INT NOT NULL COMMENT '父级权限ID' DEFAULT 0,
    `path` VARCHAR(255) COMMENT '路由路径',
    `component` VARCHAR(255) COMMENT '组件路径',
    `icon` VARCHAR(100) COMMENT '图标',
    `sort_order` INT NOT NULL COMMENT '排序' DEFAULT 0,
    `is_visible` BOOL NOT NULL COMMENT '是否可见' DEFAULT 1,
    `is_active` BOOL NOT NULL COMMENT '是否激活' DEFAULT 1,
    `is_system` BOOL NOT NULL COMMENT '是否系统权限' DEFAULT 0,
    `remark` LONGTEXT COMMENT '备注',
    `created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
    `updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4 COMMENT='权限表';
CREATE TABLE IF NOT EXISTS `roles` (
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `name` VARCHAR(50) NOT NULL UNIQUE COMMENT '角色名称',
    `code` VARCHAR(50) NOT NULL UNIQUE COMMENT '角色编码',
    `description` LONGTEXT COMMENT '角色描述',
    `permissions` JSON NOT NULL COMMENT '权限列表',
    `sort_order` INT NOT NULL COMMENT '排序' DEFAULT 0,
    `is_active` BOOL NOT NULL COMMENT '是否激活' DEFAULT 1,
    `is_system` BOOL NOT NULL COMMENT '是否系统角色' DEFAULT 0,
    `remark` LONGTEXT COMMENT '备注',
    `created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
    `updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4 COMMENT='角色表';
CREATE TABLE IF NOT EXISTS `system_configs` (
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `key` VARCHAR(100) NOT NULL UNIQUE COMMENT '配置键',
    `value` LONGTEXT NOT NULL COMMENT '配置值',
    `description` VARCHAR(255) COMMENT '配置描述',
    `type` VARCHAR(20) NOT NULL COMMENT '配置类型：string, int, float, bool, json' DEFAULT 'string',
    `is_system` BOOL NOT NULL COMMENT '是否系统配置' DEFAULT 0,
    `is_public` BOOL NOT NULL COMMENT '是否公开配置' DEFAULT 1,
    `remark` LONGTEXT COMMENT '备注',
    `created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
    `updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4 COMMENT='系统配置表';
CREATE TABLE IF NOT EXISTS `operation_logs` (
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    `user_id` INT NOT NULL COMMENT '操作用户ID',
    `username` VARCHAR(50) NOT NULL COMMENT '操作用户名',
    `module` VARCHAR(50) NOT NULL COMMENT '操作模块',
    `action` VARCHAR(50) NOT NULL COMMENT '操作动作',
    `method` VARCHAR(10) NOT NULL COMMENT 'HTTP方法',
    `path` VARCHAR(255) NOT NULL COMMENT '请求路径',
    `ip` VARCHAR(50) NOT NULL COMMENT 'IP地址',
    `user_agent` VARCHAR(500) COMMENT '用户代理',
    `request_data` JSON COMMENT '请求数据',
    `response_data` JSON COMMENT '响应数据',
    `status_code` INT NOT NULL COMMENT '状态码',
    `duration` DOUBLE NOT NULL COMMENT '执行时长(秒)',
    `success` BOOL NOT NULL COMMENT '是否成功',
    `error_message` LONGTEXT COMMENT '错误信息',
    `created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6)
) CHARACTER SET utf8mb4 COMMENT='操作日志表';
CREATE TABLE IF NOT EXISTS `files` (
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '文件ID',
    `filename` VARCHAR(255) NOT NULL COMMENT '原始文件名',
    `saved_filename` VARCHAR(255) NOT NULL UNIQUE COMMENT '存储文件名',
    `path` VARCHAR(500) NOT NULL COMMENT '文件相对路径',
    `url` VARCHAR(1000) NOT NULL COMMENT '文件访问URL',
    `size` INT NOT NULL COMMENT '文件大小（字节）',
    `hash` VARCHAR(128) COMMENT '文件哈希值(MD5/SHA256)',
    `mime_type` VARCHAR(100) NOT NULL COMMENT '文件MIME类型',
    `created_at` DATETIME(6) NOT NULL COMMENT '创建时间' DEFAULT CURRENT_TIMESTAMP(6),
    `updated_at` DATETIME(6) NOT NULL COMMENT '更新时间' DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
    `uploader_id` INT COMMENT '上传者',
    CONSTRAINT `fk_files_users_1005bef7` FOREIGN KEY (`uploader_id`) REFERENCES `users` (`id`) ON DELETE SET NULL,
    KEY `idx_files_hash_b05610` (`hash`)
) CHARACTER SET utf8mb4 COMMENT='文件存储表';"""


async def downgrade(db: BaseDBAsyncClient) -> str:
    return """
        """
